<?php

/**
 * W tym pliku wykonują się wszystkie potrzebne funkcje do zainicjalizowania strony
 * @author Paweł Napieracz
 */
session_start();

/**
 * Inicjalizuje połączenie z bazą danych
 */
$config = array(
    'Enabled' => true,
    'PConnect' => false, //Optional, use a persistant connection, Default=False
    'Handle' => null, //Optional, use existing database connection, uses this instead of connecting again
    'DieOnError' => true, //Optional, throw exception on query error, Default=True
    'Host' => $CONFIG['baza']['host'],
    'Username' => $CONFIG['baza']['login'],
    'Password' => $CONFIG['baza']['haslo'],
    'DB' => $CONFIG['baza']['baza']
);
define('INDEX', True);
require_once 'Database.class.php';
require_once 'AutoDB.class.php';
$db = new Database($config);
AutoDB::SetDB($db);
Reg::add('db', $db);

/**
 * Załączanie trybu debug
 */
if (isset($_GET['debug'])) {
    if ($_GET['debug'] == 1 || $_GET['debug'] == 'true') {
        if (!isset($_COOKIE['dbg'])) {
            setcookie('dbg', true, time() + 3600 * 24);
        }
    } else {
        unset($_COOKIE['dbg']);
        setcookie('dbg', NULL, -1);
    }
    header('Location: /');
}

/**
 * Incjalizuje smartiego
 */
require_once 'Smarty/Smarty.class.php';
$smarty = new Smarty();
$smarty->setTemplateDir($CONFIG['sciezka'] . 'Szablon/');
$smarty->setCacheDir($CONFIG['sciezka'] . 'Cache/smarty/cache');
$smarty->setConfigDir($CONFIG['sciezka'] . 'Cache/smarty/configs');
$smarty->setCompileDir($CONFIG['sciezka'] . 'Cache/smarty/templates');
//$this->smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
//$this->smarty->setCacheLifetime(86400);
//KONSOLA DEBUGOWANIA\\
if (isset($_COOKIE['dbg']) && $_COOKIE['dbg'] == true && $CONFIG['dbg'] == true)
    $smarty->debugging = true;
Reg::add('smarty', $smarty);

/**
 * Narzedzia do debugowania
 */
function _d($d, $var_dump=false) {
    echo '<pre>';
    if ($var_dump) {
        var_dump($d);
    } else {
        print_r($d);
    }
    echo '</pre>';
}

/**
 * Dodanie do rejestru nazy domeny
 */
Reg::add('domena', $CONFIG['domena']);

/**
 * Inicjalizuje routing z bazy mysql
 */
$req = explode('/', $_SERVER['REQUEST_URI']);
array_shift($req); //ucinam początkową domenę
Reg::add('req', $req);
/* Sprawdzam czy ostatnia strona zawiera .html */
if (substr(end($req), -5, 5) == '.html') {
    array_pop($req);
}
/* Składam teraz adres strony do wywołania z bazy danych pola url w tablic cms_strona */
foreach ($req as $v) {
    $strona .= '/' . $v;
}
/* Jeżeli '/' jest na ostatnim miejscu obcinam go */
if (strlen($strona) > 1 && substr($strona, -1, 1) == '/') {
    $strona = substr($strona, 0, -1);
}
//_d($strona);

/**
 * Wczytywanie modułów i szablonu z bazy danych
 */
/* Sprawdzam czy w bazie jest taki rekord */
//SELECT `cms_strona`.`szablon`, `cms_strona_modul`.`polozenie`, `cms_strona_modul`.`kolejnosc`, `cms_modul`.`nazwa` AS `modul`
//FROM `cms_strona` LEFT JOIN `cms_strona_modul` ON `cms_strona`.`id` = `cms_strona_modul`.`id_strona` LEFT JOIN `cms_modul` 
//ON `cms_strona_modul`.`id_modul` = `cms_modul`.`id` WHERE `cms_strona`.`url` = '/'
$tab = new AutoDB('cms_strona');
$zapytanie =
                $tab->Select('cms_strona.szablon, cms_strona_modul.polozenie, cms_strona_modul.kolejnosc, cms_modul.nazwa AS modul')
                ->Join('cms_strona_modul', 'cms_strona.id = cms_strona_modul.id_strona', 'left')
                ->Join('cms_modul', 'cms_modul.id = cms_strona_modul.id_modul', 'left')
                ->Where(array('cms_strona.url' => $strona))
                ->OrderBy('cms_strona_modul.kolejnosc')->Run(); //TODO: sprawdzić czy napewno w dobrej kolejności wrzuca moduły!
if ($zapytanie !== false) {
    $wynik = $zapytanie->AsArray();
    /* Inicjalizuje kontroler */
    require_once 'Controller.class.php';
    $kontroler = new Controller();
    $kontroler = $kontroler->getController();
    /* Ładuje moduły */
    foreach ($wynik as $v) {
        if ($v['modul'] !== null) {
            $nazwa = 'Modul_' . $v['modul'];
            $klasa = new $nazwa;
            $klasa->init(&$kontroler['uzytkownik'], &$kontroler['param'], &$v['polozenie'], &$nazwa);
            //sprawdzam prawa dostępu do modułu!
            $klasa->prawa();
            $klasa->inicjalizuj();
            $tytul = $klasa->generuj();
            /* Załączanie danych do smartiego */
            if ($tytul !== false)
                $smarty->assign('tytul',$tytul);
            $smarty->assign('domena',$CONFIG['domena']);
        }
    }
    /* Ładuje szablon główny */
    $smarty->display('Glowny/' . $wynik[0]['szablon'] . '.tpl');
    //die();
} else {
    echo 'Nie znalazłem podanej strony!'; //404
}
?>
